/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jam.sfcc.common.data;

import jam.sfcc.common.domain.Producto;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;

/**
 *
 * @author ARIEL
 */
public class ProductoData extends BaseData {

    public ProductoData(String userName, String password) {
        super(userName, password);
    }

    public void insertarProductoNuevo(Producto producto) throws SQLException {
        Connection conexion = this.getConnection();
        String sqlInsert =
                "insert into Producto (nombre,descripcion,precio,cantidad_inventario,punto_reorden,cod_categoria) "
                + "values(?,?,?,?,?,?)";
        PreparedStatement statement = conexion.prepareStatement(sqlInsert);
        statement.setString(1, producto.getNombreProducto());
        statement.setString(2, producto.getDescripcion());
        statement.setFloat(3, producto.getPrecio());
        statement.setInt(4, producto.getCantidadInventario());
        statement.setInt(5, producto.getPuntoReorden());
        statement.setInt(6, producto.getCategoria().getCodCategoria());
        statement.executeUpdate();
        statement.close();
        conexion.close();
    }

    public void borrarProducto(int codProducto) throws SQLException {
        Connection conexion = this.getConnection();
        String sqlDelete = "DELETE FROM Producto "
                + "WHERE cod_producto=" + codProducto;
        PreparedStatement statement = conexion.prepareStatement(sqlDelete);
        statement.executeUpdate();
        statement.close();
        conexion.close();
    }

    public void actualizarProducto(Producto producto) throws SQLException {
        Connection conexion = this.getConnection();
        String sqlUpdate =
                "UPDATE Producto "
                + "SET nombre=?,descripcion=?,precio=?,cod_categoria=? "
                + "WHERE cod_producto=" + producto.getCodProducto();
        PreparedStatement statement = conexion.prepareStatement(sqlUpdate);
        statement.setString(1, producto.getNombreProducto());
        statement.setString(2, producto.getDescripcion());
        statement.setFloat(3, producto.getPrecio());
        statement.setInt(4, producto.getCategoria().getCodCategoria());
        statement.executeUpdate();
        statement.close();
        conexion.close();
    }

    public Producto getProducto(int codProducto) throws SQLException {
        Connection conexion = this.getConnection();
        String sqlSelect =
                "SELECT cod_producto,nombre,descripcion,precio,cantidad_inventario,punto_reorden,Categoria.cod_categoria,nombre_categoria "
                + "FROM Producto,Categoria "
                + "WHERE Producto.cod_categoria =Categoria.cod_categoria AND cod_producto=" + codProducto;
        PreparedStatement statement = conexion.prepareStatement(sqlSelect);
        ResultSet resultSet = statement.executeQuery();
        Producto producto = new Producto();
        if (resultSet.next()) {
            producto.setCodProducto(resultSet.getInt("cod_producto"));
            producto.setNombreProducto(resultSet.getString("nombre"));
            producto.setDescripcion(resultSet.getString("descripcion"));
            producto.setPrecio(resultSet.getFloat("precio"));
            producto.setCantidadInventario(resultSet.getInt("cantidad_inventario"));
            producto.setPuntoReorden(resultSet.getInt("punto_reorden"));
            producto.getCategoria().setCodCategoria(resultSet.getInt("cod_categoria"));
            producto.getCategoria().setNombreCategoria(resultSet.getString("nombre_categoria"));
        }
        statement.close();
        conexion.close();
        return producto;
    }

    public LinkedList<Producto> getProductosPorCategoria(int codCategoria) throws SQLException {
        Connection conexion = this.getConnection();
        String sqlSelect =
                "SELECT cod_producto,nombre,descripcion,precio,cantidad_inventario,Categoria.cod_categoria,nombre_categoria "
                + "FROM Producto,Categoria "
                + "WHERE Producto.cod_categoria =Categoria.cod_categoria AND Producto.cod_categoria=" + codCategoria;
        PreparedStatement statement = conexion.prepareStatement(sqlSelect);
        ResultSet resultSet = statement.executeQuery();
        LinkedList<Producto> productos = new LinkedList<>();
        while (resultSet.next()) {
            Producto producto = new Producto();
            producto.setCodProducto(resultSet.getInt("cod_producto"));
            producto.setNombreProducto(resultSet.getString("nombre"));
            producto.setDescripcion(resultSet.getString("descripcion"));
            producto.setPrecio(resultSet.getFloat("precio"));
            producto.setCantidadInventario(resultSet.getInt("cantidad_inventario"));
            producto.getCategoria().setCodCategoria(resultSet.getInt("cod_categoria"));
            producto.getCategoria().setNombreCategoria(resultSet.getString("nombre_categoria"));
            productos.add(producto);
        }
        statement.close();
        conexion.close();
        return productos;
    }

    public void agregarProductoExistente(Producto producto) throws SQLException {
        Connection conexion = this.getConnection();
        String sqlUpdate =
                "UPDATE Producto"
                + " SET cantidad_inventario=cantidad_inventario+?"
                + " WHERE cod_producto=" + producto.getCodProducto();
        PreparedStatement statement = conexion.prepareStatement(sqlUpdate);
        statement.setInt(1, producto.getCantidadInventario());
        statement.executeUpdate();
        statement.close();
        conexion.close();
    }

    public LinkedList<Producto> getProductoPtoReorden() throws SQLException {
        Connection conexion = this.getConnection();
        String sqlSelect =
                "SELECT cod_producto,nombre,descripcion,precio,cantidad_inventario,punto_reorden,Categoria.cod_categoria,nombre_categoria "
                + "FROM Producto,Categoria "
                + "WHERE Producto.cantidad_inventario = punto_reorden  and Producto.cod_categoria =Categoria.cod_categoria";
        PreparedStatement statement = conexion.prepareStatement(sqlSelect);
        ResultSet resultSet = statement.executeQuery();
        LinkedList<Producto> productos = new LinkedList<>();
        while(resultSet.next()) {
            Producto producto = new Producto();
            producto.setCodProducto(resultSet.getInt("cod_producto"));
            producto.setNombreProducto(resultSet.getString("nombre"));
            producto.setDescripcion(resultSet.getString("descripcion"));
            producto.setPrecio(resultSet.getFloat("precio"));
            producto.setCantidadInventario(resultSet.getInt("cantidad_inventario"));
            producto.setPuntoReorden(resultSet.getInt("punto_reorden"));
            producto.getCategoria().setCodCategoria(resultSet.getInt("cod_categoria"));
            producto.getCategoria().setNombreCategoria(resultSet.getString("nombre_categoria"));
            productos.addLast(producto);
        }
        statement.close();
        conexion.close();
        return productos;
    }
}
